# 迭代器模式

# ⭐=> 能在不暴露复杂数据结构内部细节的情况下遍历其中所有的元素

# 角色
# 迭代器: 提供了访问容器中每个元素的方式, 并跟踪当前位置
# 容器: 包含多个元素, 并提供一个方法来生成迭代器

from collections.abc import Iterator, Iterable

class MyIterator(Iterator):
    def __init__(self, data):
        self.data = data
        self.index = 0
    def __next__(self):
        if self.index < len(self.data):
            result = self.data[self.index]
            self.index += 1
            return result
        else:
            raise StopIteration

class MyIterable(Iterable):
    def __init__(self, data):
        self.data = data
    def __iter__(self):
        return MyIterator(self.data)

if __name__ == "__main__":
    data = [1, 2, 3, 4, 5]
    iterable = MyIterable(data)
    for item in iterable:
        print(item)
    # Output: 1 2 3 4 5